// 创建用户相关小仓库
import { defineStore } from "pinia"
import { reqLogin, reqGetMenuInfo } from '@/api/user'
import { setItem, getItem, delItem } from '@/utils/storage.js'
// 引入路由（常量路由）
import { constantRoute } from '@/router/routes'
// 创建
let useUserStore = defineStore('User', { // 仓库采用的是选择式api的写法
    // 小仓库存储数据的地方
    state: () => {
        return {
            companyAddress: getItem('COMPANYADDRESS'), // 企业地址
            companyName: getItem('COMPANYNAME'), // 企业名称
            token: getItem('TOKEN'), // 用户唯一标识token
            menuRoutes: constantRoute, // 仓库存储生成菜单需要数组（路由）
            username: getItem('USERNAME'), // 用户姓名
            avatar: getItem('AVATAR'), // 用户头像
            componentConfig: getItem('COMPONENTCONFIG'), // 按钮，筛选条件，表格列控制
            roleMenu: '' // 角色菜单
        }
    },
    // 异步 | 逻辑 的地方
    actions: {
        // 用户登录方法
        async userLogin(data){
            let res = await reqLogin(data)
            console.log('登录成功', res)
            if(res.status == 200){
                this.token = res.data.token
                this.username = res.data.username
                this.avatar = res.data.avatar
                this.componentConfig = res.data.componentConfig
                this.companyName = res.data.companyName
                this.companyAddress = res.data.companyAddress
                setItem('TOKEN', res.data.token)
                setItem('USERNAME', res.data.username)
                setItem('AVATAR', res.data.avatar)
                setItem('COMPONENTCONFIG', res.data.componentConfig)
                setItem('COMPANYNAME', res.data.companyName)
                setItem('COMPANYADDRESS', res.data.companyAddress)
                return 'ok' // 能保证当前 async 函数返回一个成功的 promise
            }else{
                // return Promise.reject(new Error(res.data.message))
                return Promise.reject(new Error(res.msg))
            }
        },
        // 获取权限菜单
        async userMenu(){
            // 获取权限菜单，存储仓库中
            let res = await reqGetMenuInfo()
            this.roleMenu = res.data
            console.log('用户菜单---', res)
        },
        // 用户退出登录方法
        userLogout(){
            // 目前没有退出登录接口（通知服务器本地用户唯一标识失效）
            this.username = ''
            this.avatar = ''
            this.token = ''
            this.componentConfig = ''
            this.companyName = ''
            this.companyAddress = ''
            // 清空本地存储的token
            delItem('TOKEN')
            delItem('AVATAR') // 清空本地存储的用户头像
            delItem('USERNAME') // 清空本地存储的用户姓名
            delItem('COMPONENTCONFIG') // 按钮，筛选条件，表格列控制
            delItem('COMPANYNAME')
            delItem('COMPANYADDRESS')
        }
    },
    // 计算属性
    getters: {

    }
})
// 对外暴露
export default useUserStore